package com.sihai.ehr.service;

import com.sihai.core.Limit;
import com.sihai.core.LimitedList;
import com.sihai.core.Sorter;
import com.sihai.ehr.model.biz.ExamQualCoerceSet;
import com.sihai.ehr.model.biz.ExamQualDistSet;
import com.sihai.ehr.model.sys.DispersionPatternEnum;
import com.sihai.ehr.model.sys.ExaminePeriodEnum;
import com.sihai.ehr.web.pojo.ExamQualCoerceSetPojo;

/**
 * 定性考核强制分布服务
 * 
 * @author Henry
 * 
 */
public interface ExamQualSetService {

	/**
	 * 检测分数区别是否存在
	 * 
	 * @param organizationId
	 * @param score
	 * @param id
	 * @return
	 */
	boolean checkScoreAreaExist(Long organizationId, Float scoreStart,
			Float scoreEnd, ExaminePeriodEnum periodType, Long id);

	/**
	 * 获取强制分布对象
	 * 
	 * @param id
	 * @return
	 */
	ExamQualCoerceSet getExamQualCoerceSet(Long id);

	/**
	 * 根据组织结构编号获取分布设置
	 * 
	 * @param organizationId
	 * @param periodType
	 * @return
	 */
	ExamQualDistSet getExamQualDistSet(Long organizationId,
			ExaminePeriodEnum periodType);

	/**
	 * 根据组织结构ID及分布类型获取组织结构下分布
	 * 
	 * @param organizationId
	 * @param dispersionPatternEnum
	 * @param limit
	 * @param sorter
	 * @return
	 */
	LimitedList<ExamQualCoerceSet> searchExamQualCoerceSets(
			Long organizationId, DispersionPatternEnum dispersionPatternEnum,
			ExaminePeriodEnum periodEnum, Limit limit, Sorter sorter);

	/**
	 * 根据组织分布类型对象获取分布列表
	 * 
	 * @param examQualCoerceSet
	 * @param limit
	 * @param sorter
	 * @return
	 */
	LimitedList<ExamQualCoerceSet> searchExamQualCoerceSets(
			ExamQualCoerceSet examQualCoerceSet, Limit limit, Sorter sorter);

	/**
	 * 保存定性考核强制分布设定对象
	 * 
	 * @param examQualCoerceSet
	 */
	void saveExamQualCoerceSet(ExamQualCoerceSet examQualCoerceSet);

	/**
	 * 保存定性考核强制分布设置对象
	 * 
	 * @param examQualDistSet
	 */
	void saveExamQualDistSet(ExamQualDistSet examQualDistSet);

	/**
	 * 根据部门编号删除强制分页
	 * 
	 * @param organizationId
	 */
	void deleteExamQualCoerceSets(Long organizationId,
			ExaminePeriodEnum periodType);

	/**
	 * 根据设定编号删除强制分布
	 * 
	 * @param id
	 */
	void deleteExamQualCoerceSetsById(Long id);

	/**
	 * 移出定性考核强制分布集合
	 * 
	 * @param examQualCoerceSetIds
	 */
	void removeExamQualCoerceSets(String examQualCoerceSetIds);

	/**
	 * 统计定性考核强制分布
	 * 
	 * @param orgId
	 *            组织结构ＩＤ
	 * @param dutyId
	 *            职务编号
	 * @param dispersionPatternEnum
	 *            周期类型
	 * @param peroidId
	 *            周期ＩＤ
	 * @param periodEnum
	 *            周期类型
	 * @return
	 */
	LimitedList<ExamQualCoerceSetPojo> queryExamQualSetByQualScore(Long orgId,
			Long dutyId, Long peroidId, ExaminePeriodEnum periodEnum);
	
	/**
	 * 统计定性考核强制分布
	 * 
	 * @param orgId
	 *            组织结构ＩＤ
	 * @param dutyId
	 *            职务编号
	 * @param dispersionPatternEnum
	 *            周期类型
	 * @param peroidId
	 *            周期ＩＤ
	 * @param periodEnum
	 *            周期类型
	 * @return
	 */
	LimitedList<ExamQualCoerceSetPojo> queryExamQualSetByStatics(Long orgId,
			Long dutyId, Long peroidId, ExaminePeriodEnum periodEnum);

	/**
	 * 根据组织结构ID获取组织结构下分布
	 * 
	 * @param organizationId
	 * @param periodType
	 * @param limit
	 * @param sorter
	 * @return
	 */
	LimitedList<ExamQualCoerceSet> searchExamQualCoerceSets(
			Long organizationId, ExaminePeriodEnum periodType, Limit limit,
			Sorter sorter);

	/**
	 * 根据部门ID获取统计员工
	 * 
	 * @param orgId
	 * @return
	 */
	Long getTotalCountByOrganizationIdAndPeriodType(Long orgId,
			ExaminePeriodEnum periodEnum, boolean isReadChild);

	/**
	 * 根据组织结构ＩＤ获取总设计过的百分比
	 * 
	 * @param orgId
	 * @return
	 */
	Float getQualCoerceTotalPercentageByOrgId(Long orgId,
			ExaminePeriodEnum periodEnum);

}
